Ana içeriğe geç

Kuyruk (Queue) Veri Yapısı

Kuyruk (queue) veri yapısı, ilk giren ilk çıkar (First-In, First-Out - FIFO) prensibine dayalı bir veri yapısıdır. Kuyruk, elemanları belirli bir sırayla saklar ve yeni bir eleman kuyruğun sonuna eklenir. Kuyruk veri yapısı, genellikle işlem kuyrukları, kaynak yönetimi, otomatik önceliklendirme vb. gibi birçok programlama probleminde kullanılır.

Gündelik hayatta kuyruk veri yapısının kullanıldığı 3 örnek:

  1. Bir yemekhane kuyruğu için kuyruk veri yapısı kullanılabilir. Yemekhane girişinde, yeni müşteriler kuyruğun sonuna eklenir ve yemeklerini alıp çıktıklarında kuyruktaki ilk müşteri çıkarılır.
  2. Bir banka ATM'si, müşterilerin sırasını takip etmek için kuyruk veri yapısını kullanabilir. ATM'ye gelen müşteriler, kuyruğun sonuna eklenir ve ATM'yi kullanıp çıktıklarında, kuyruktaki ilk müşteri çıkarılır.
  3. Bir müzik çalma uygulaması, müzik çalma sırasını takip etmek için kuyruk veri yapısını kullanabilir. Kullanıcının seçtiği şarkılar, kuyruğun sonuna eklenir ve şarkılar çalındıkça kuyruktaki ilk şarkı çıkarılır.

Bu 3 örnek için Türkçe pseudo kodları:

  1. Bir yemekhane kuyruğu için pseudo kod:
// Yemekhane kuyruğu için kuyruk oluştur
yemekhane_kuyruğu = bos_kuyruk()

// Yeni müşteriler kuyruğun sonuna eklensin
eğer yeni_müşteri_geldi ise
yemekhane_kuyruğu.ekle(yeni_müşteri)
eğer_sonu

// Yemeklerini alıp çıkan müşteriler kuyruktan çıkarılsın
eğer kuyruk_boş_degil ise
birinci_müşteri = yemekhane_kuyruğu.ilk_eleman()
yemeklerini_aldı(birinci_müşteri)
yemekhane_kuyruğu.çıkar()
eğer_sonu

Bir banka ATM'si için müşterilerin sırasının kuyruk veri yapısı kullanarak takip edilmesi için pseudo kod :

// ATM için kuyruk oluştur
atm_kuyruğu = bos_kuyruk()

// Yeni müşteriler kuyruğun sonuna eklensin
eğer yeni_müşteri_geldi ise
atm_kuyruğu.ekle(yeni_müşteri)
eğer_sonu

// ATM'yi kullanan müşteriler kuyruktan çıkarılsın
eğer kuyruk_boş_degil ise
birinci_müşteri = atm_kuyruğu.ilk_eleman()
atm_kullandı(birinci_müşteri)
atm_kuyruğu.çıkar()
eğer_sonu

Yukarıdaki pseudo kodda, yeni bir müşteri ATM'ye geldiğinde, müşteri kuyruğunun sonuna eklenir. ATM'yi kullanan müşteriler kuyruktan çıkarılır ve ATM'den çıktıktan sonra, kuyruktaki ilk müşteri çıkarılır.

Bir müzik çalma uygulaması için müzik çalma sırasının kuyruk veri yapısı kullanarak takip edilmesi için kaba kod:

// Müzik çalma kuyruğu için kuyruk oluştur
müzik_kuyruğu = bos_kuyruk()

// Kullanıcının seçtiği şarkılar kuyruğun sonuna eklensin
eğer yeni_şarkı_eklendi ise
müzik_kuyruğu.ekle(yeni_şarkı)
eğer_sonu

// Çalınan şarkılar kuyruktan çıkarılsın
eğer kuyruk_boş_degil ise
birinci_şarkı = müzik_kuyruğu.ilk_eleman()
şarkıyı_çal(birinci_şarkı)
müzik_kuyruğu.çıkar()
eğer_sonu

Yukarıdaki pseudo kodda, kullanıcının seçtiği yeni bir şarkı müzik kuyruğunun sonuna eklenir. Çalınan şarkılar kuyruktan çıkarılır ve çalınan şarkıların ardından, kuyruktaki ilk şarkı çıkarılır.

  • Ağaç (tree) veri yapısı, düğümler (nodes) ve bu düğümleri birbirine bağlayan kenarlar (edges) ile tanımlanan hiyerarşik bir veri yapısıdır. Herhangi bir düğümün altında alt düğümler (child nodes) bulunabilir ve her alt düğümün de kendi alt düğümleri olabilir. Ağaç veri yapısı, dosya sistemleri, bilimsel hesaplama, oyun programlaması vb. birçok programlama probleminde kullanılır.

Gündelik hayatta ağaç veri yapısının kullanıldığı 3 örnek:

  1. İnternet sayfalarının hiyerarşik yapısı, ağaç veri yapısının bir örneğidir. Ana sayfa, alt sayfaları bağlar ve alt sayfaların da kendi alt sayfaları olabilir.
  2. Bir organizasyonun personel hiyerarşisi, ağaç veri yapısının bir örneğidir. Üst düzey yöneticiler, orta kademe yöneticileri ve alt düzey personel gibi farklı seviyelerde düğümler bulunur.
  3. Bir oyunun oyun ağacı, ağaç veri yapısının bir örneğidir. Her düğüm, bir oyun durumunu temsil eder ve her bir kenar, oyuncunun seçeneklerini temsil eder.

Bu 3 örnek için Türkçe pseudo kodları:

  1. İnternet sayfalarının hiyerarşik yapısı için pseudo kod:
// İnternet sayfaları için ağaç oluştur
internet_sayfa_agaci = bos_agac()

// Ana sayfa düğümü oluştur
ana_sayfa = yeni_dugum("www.orneksite.com")

// Alt sayfalar eklensin
ana_sayfa.alt_sayfa_ekle("www.orneksite.com/hakkimizda")
ana_sayfa.alt_sayfa_ekle("www.orneksite.com/urunler")
ana_sayfa.alt_sayfa_ekle("www.orneksite.com/iletisim")

// Alt sayfaların alt sayfaları da eklensin
ornek_alt_sayfa = ana_sayfa.alt_sayfa("www.orneksite.com/hakkimizda")
ornek_alt_sayfa.alt_sayfa_ekle("www.orneksite.com/hakkimizda/tarihce")
ornek_alt_sayfa.alt_sayfa_ekle("www.orneksite.com/hakkimizda/misyonumuz")

// Düğümler gezilerek internet sayfaları listelensin
internet_sayfa_listesi = bos_liste()
düğümleri_gez(internet_sayfa_agaci, ana_sayfa, internet_sayfa_listesi)

  1. Bir organizasyonun personel hiyerarşisi için pseudo kod:
// Personel hiyerarşisi için ağaç oluştur
personel_agaci = bos_agac()

// Üst düzey yöneticileri oluştur
ceo = yeni_dugum("Ali", "CEO")
genel_mudur = yeni_dugum("Ayşe", "Genel Müdür")
finans_muduru = yeni_dugum("Fatih", "Finans Müdürü")

// Yöneticilerin altında çalışanları oluştur
ceo.alt_sayfa_ekle("Mehmet", "Proje Yöneticisi")
ceo.alt_sayfa_ekle("Aylin", "Pazarlama Yöneticisi")
genel_mudur.alt_sayfa_ekle("Gökhan", "İnsan Kaynakları Yöneticisi")
genel_mudur.alt_sayfa_ekle("Burak", "Üretim Müdürü")
finans_muduru.alt_sayfa_ekle("Esra", "Muhasebe Yöneticisi")
finans_muduru.alt_sayfa_ekle("Can", "Bütçe Uzmanı")

// Düğümler gezilerek personel hiyerarşisi listelensin
personel_listesi = bos_liste()
düğümleri_gez(personel_agaci, ceo, personel_listesi)

  1. Bir oyunun oyun ağacı için pseudo kod:
// Oyun ağacı için ağaç oluştur
oyun_agaci = bos_agac()

// Kök düğümü oluştur
kök = yeni_dugum("Bir oyun durumu")

// Seçenekler eklenir
kök.alt_sayfa_ekle("Seçenek 1")
kök.alt_sayfa_ekle("Seçenek 2")
kök.alt_sayfa_ekle("Seçenek 3")

// Seçeneklerin alt düğümleri de olabilir
seçenek_1 = kök.alt_sayfa("Seçenek 1")
seçenek_1.alt_sayfa_ekle("Seçenek 1.1")
seçenek_1.alt_sayfa_ekle("Seçenek 1.2")

seçenek_2 = kök.alt_sayfa("Seçenek 2")
seçenek_2.alt_sayfa_ekle("Seçenek 2.1")

seçenek_3 = kök.alt_sayfa("Seçenek 3")
seçenek_3.alt_sayfa_ekle("Seçenek 3.1")
seçenek_3.alt_sayfa_ekle("Seçenek 3.2")
seçenek_3.alt_sayfa_ekle("Seçenek 3.3")

// Düğümler gezilerek oyun ağacı listelensin
oyun_durumu_listesi = bos_liste()
düğümleri_gez(oyun_agaci, kök, oyun_durumu_listesi)